Deep Learning I
7. 现代卷积神经网络
WU Xiaokun 吴晓堃
xkun.wu [at] gmail
2021/04/04
LeNet是早期神经网络的成功案例
期间:卷积神经网络更像是“异类”
核方法:支持向量机 SVM
多视图几何:主要用于计算机视觉
特征:描述目标对象的标识
通常这些特征来源于偶然的发现
人工设计好特征之后才能应用SVM等经典机器学习算法
经典机器学习的工作流程
机器学习:倾向于理论证明;忽略工程实践的话,数学分析的确很有趣
视觉实践:必须能够解决实际问题,就会发现算法改进不太重要
| 年代 | 数据规模 | 内存 | 每秒浮点运算 |
|---|---|---|---|
| 1970 | 100 (鸢尾花卉) | 1 KB | 100 KF (Intel 8080) |
| 1980 | 1 K (波士顿房价) | 100 KB | 1 MF (Intel 80186) |
| 1990 | 10 K (光学字符识别) | 10 MB | 10 MF (Intel 80486) |
| 2000 | 10 M (网页) | 100 MB | 1 GF (Intel Core) |
| 2010 | 10 G (广告) | 1 GB | 1 TF (Nvidia C2050) |
| 2020 | 1 T (社交网络) | 100 GB | 1 PF (Nvidia DGX-2) |
| ImageNet | MNIST | |
|---|---|---|
| 图片 | 自然物体、彩色 | 手写数字、黑白 |
| 大小 | 469x387 | 28x28 |
| 样本数 | 1.2M | 60K |
| 类别数 | 1000 | 10 |
计算机视觉的新思路:特征本身应该是能够被学习的参数
底层:边缘、颜色和纹理
高层:复合纹理、抽象概念
首个深度卷积神经网络
引发计算机视觉方法论的改变
激活函数:从sigmoid改成ReLU
全连接模块中加入了丢弃层
数据增广:增强数据多样性
| 参数量 | FLOPS | |||
|---|---|---|---|---|
| Conv1 | 35K | 150 | 101M | 1.2M |
| Conv2 | 614K | 2.4K | 415M | 2.4M |
| Conv3-5 | 3M | N/A | 445M | N/A |
| Dense1 | 26M | 0.48M | 26M | 0.48M |
| Dense2 | 16M | 0.1M | 16M | 0.1M |
| Total | 46M | 0.6M | 1G | 4M |
| Increase | 80x | 1x | 250x | 1x |
| AlexNet | LeNet | AlexNet | LeNet |
AlexNet是更大、更深的LeNet
假如将AlexNet做得更大、更深呢?
VGG:以模块作为基本单元,仿照AlexNet卷积序列
架构:串联重复的模块单元
最后仍然接全连接层
LeNet:最早的卷积神经网络
AlexNet:更大、更深的LeNet
VGG:更大、更深的AlexNet
下一步:更大、更深的VGG?
cv.gluon.ai/model_zoo/classification
LeNet、AlexNet和VGG
AlexNet和VGG:加大、加深以上两个模块
NiN将串联的每个模块看成完整网络
回顾:1x1卷积等价于全连接
卷积层 + 两个1x1卷积层
交替使用:NiN模块、步幅2的最大池化层
无全连接层
卷积层的参数量(\mathbf{W}):c_o \times c_i \times k^2
卷积层之后的第一个全连接层
参数量决定计算、存储:限制网络深度
LeNet、AlexNet、VGG、NiN
工程美学的典范:使用不同大小卷积核的组合
We need to go deeper! – Inception
与AlexNet(右)对比
核心:2x Inception 模块
第一个Inception 模块的通道数图示
| #参数 | FLOPS | |
|---|---|---|
| Inception | 0.16 M | 128 M |
| 3x3 Conv | 0.44 M | 346 M |
| 5x5 Conv | 1.22 M | 963 M |
Inception-BN (V2):使用batch normalization
Inception-V3:模块调优
Inception-V4:使用残差连接
替换5x5为两个3x3
替换3x3为1x7和7x1
替换3x3为1x3和3x1(也有替换5x5为两个3x3)
cv.gluon.ai/model_zoo/classification
Inception模块:4条不同路径
GoogLeNet:9个Inception模块
网络非常深:计算依赖链过长,层间信息传递变难,导致收敛变慢
损失函数在最后:后面层参数关联直接、训练较快
数据在最前:前面层易受数据影响、训练较慢
能否避免层间学习难度剧烈变化?
回忆:输出、梯度可以看成随机变量
只要控制统计量,就能避免数据分布的剧烈变化
批量标准化:\gamma,\beta是可学习参数
x_i = \gamma \frac{x_i - \mu}{\sigma} + \beta
估计批量的均值、方差:
\begin{aligned} \hat{\mu}_B &= \frac{1}{|B|} \sum_i x_i\\ \hat{\sigma}_B^2 &= \frac{1}{|B|} \sum_i (x_i - \hat{\mu}_B)^2 + \epsilon \end{aligned}
测试模式:使用训练阶段的移动平均估算(整个数据集的均值、方差)
可学习参数:\gamma,\beta
x_i = \gamma \frac{x_i - \hat{\mu}_B}{\hat{\sigma}_B} + \beta
最初论文猜测:减少内部协方差的偏移
后续工作认为:给批量加入噪音,进而增强模型鲁棒性
x_i = \gamma \frac{x_i - \hat{\mu}_B}{\hat{\sigma}_B} + \beta
深度学习论文的特点:理论基本靠猜
回顾:似乎将网络做深就能提高效能
虚线:串联一个模块
残差:只需学习增量\Delta=f(x)-x
实线旁路:数据可以跨层直接传播
类似VGG的3x3卷积层设计
数据旁路:接在最后激活之前
类似GoogLeNet架构
ResNet架构更简单,修改也更方便
cv.gluon.ai/model_zoo/classification
深度卷积神经网络 AlexNet。使用块的网络 VGG。网络中的网络 NiN。含并行连结的网络 GoogLeNet。批量规范化。残差网络 ResNet。
重点:AlexNet;VGG;NiN;Inception模块;批量规范化;残差网络 ResNet。
难点:Inception变种。
简述AlexNet的设计特点、学术贡献。
简述VGG的设计特点。
简述NiN的设计特点、创新点。
简述Inception模块的设计特点,及其变种的设计特点。
简述批量规范化的动机、原理、方法。
简述ResNet的原理,及其模块的设计特点。